import router from '@/router'
import axios from 'axios'
import { Toast } from 'vant'

// 创建一个新的axios实例
const instance = axios.create({
  baseURL: 'http://interview-api-t.itheima.net/h5',
  timeout: 5000
  // headers: { platform: 'H5' }
})

// 自定义配置-请求/响应 拦截器
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 开启loading，禁止背景点击（节流处理，防止多次无效触发）
  Toast.loading({
    message: '请求中...',
    forbidClick: true, // 是否禁用背景点击
    loadingType: 'spinner', // loading样式
    duration: 0 // 持续时间 只要请求没结束，一直加载loading
  })
  // 只要有token，就在请求时携带，便于请求需要授权的接口
  const token = localStorage.getItem('token')
  if (token) {
    // 将 token 放入 header 中 格式 Authorization: Bearer ${token}
    config.headers['Authorization'] = `Bearer ${token}`
  } 
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
instance.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  const res = response.data
  if (response.status === 200) {
    // 正常情况，直接走业务核心逻辑，清除loading效果
    Toast.clear()
    return res
  }
}, function (error) {
  // 对响应错误做点什么
  // console.log(error.response)
  if (error.response.status === 400) {
    Toast(error.response.data.message)
  }
  if (error.response.status === 401) {
    router.push('/login')
    Toast(error.response.data.message)
  }
  if (error.response.status === 404) {
    Toast(error.response.data.message)
  }
  return Promise.reject(error)
})

// 导出配置好的实例
export default instance
